class Solution(object):
    def judgePoint24(self, cards):
        """
        :type cards: List[int]
        :rtype: bool
        """
        # 将整数转换为浮点数，以便进行实数除法
        nums = [float(x) for x in cards]
        return self.dfs(nums)

    def dfs(self, nums):
        n = len(nums)
        # 当列表只剩一个数字时，检查是否等于24（考虑浮点精度）
        if n == 1:
            return abs(nums[0] - 24) < 1e-6

        # 枚举所有不重复的数字对 (i, j)，其中 i < j
        for i in range(n):
            for j in range(i + 1, n):
                # 创建新列表，包含除 nums[i] 和 nums[j] 外的所有数字
                new_nums = []
                for k in range(n):
                    if k != i and k != j:
                        new_nums.append(nums[k])

                # 获取选中的两个数字
                a, b = nums[i], nums[j]
                # 存储所有可能的运算结果
                candidates = [
                    a + b,  # 加法
                    a - b,  # 减法（a - b）
                    b - a,  # 减法（b - a）
                    a * b,  # 乘法
                ]
                # 除法（a / b，确保除数不为零）
                if abs(b) > 1e-6:
                    candidates.append(a / b)
                # 除法（b / a，确保除数不为零）
                if abs(a) > 1e-6:
                    candidates.append(b / a)

                # 对每种运算结果，递归检查剩余数字
                for value in candidates:
                    if self.dfs(new_nums + [value]):
                        return True
        return False